package source
{
	import flash.system.ApplicationDomain;
	import flash.utils.ByteArray;
	
	import org.bytearray.explorer.SWFExplorer;

	/**
	 *	swf文件强类型 
	 * @author Roland
	 * 
	 */
	public class SwfObj
	{
		public function SwfObj()
		{
		}
		
		/**
		 *	swf文件名 
		 */
		public var name:String;
		
		/**
		 *	swf的二进制数据 
		 */
		public var data:ByteArray;
		
		/**
		 *	 swf对应的applicationDomain
		 */
		public var appDomain:ApplicationDomain;
		
		/**
		 *	此swf文件的大小(单位:KB) 
		 * @return 
		 * 
		 */
		public function get size():Number
		{
			return Math.ceil(data.length/1024)
		}
		
		/**
		 *	此swf文件中所有的导出类列表 
		 * @return 
		 * 
		 */
		public function get Classes():Array
		{
			var classes:Array = [];
			if(data)
			{
				var explorer:SWFExplorer = new SWFExplorer();
				classes = explorer.parse(data);
			}
			return classes;
		}
		
		/**
		 * 通过类名或取类
		 */
		public function getClass(className:String):Class
		{
			if(appDomain.hasDefinition(className))
				return appDomain.getDefinition(className) as Class;
			
			return null;
		}
		
		/**
		 *	填充数据 
		 * @param name swf文件名
		 * @param data 文件的ByteArray数据
		 * @param appDomain 此swf对应的applicationDomain
		 * @return SwfObj类型的实例,包含swf文件详的细信息
		 * 
		 */
		public static function parseData(name:String,data:ByteArray,appDomain:ApplicationDomain):SwfObj
		{
			var $obj:SwfObj = new SwfObj();
			$obj.name = name;
			$obj.data = data;
			$obj.appDomain = appDomain;
			return $obj;
		}
	}
}